ããã°ã©ãã³ã°ã«ãããé«åºŠãªååæã®ããã®ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åãšãŠããªã³åã®åŒ·åãªæ©èœãæ¢æ±ããŸããè€éãªããŒã¿æ§é ã广çã«ã¢ãã«åããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«ã³ãŒãã®ä¿å®æ§ãé«ããæ¹æ³ãåŠã³ãŸãããã
ã€ã³ã¿ãŒã»ã¯ã·ã§ã³å vs ãŠããªã³åïŒè€éãªååææŠç¥ããã¹ã¿ãŒãã
ãœãããŠã§ã¢éçºã®äžçã§ã¯ãè€éãªããŒã¿æ§é ã广çã«ã¢ãã«åãã管çããèœåãæãéèŠã§ããããã°ã©ãã³ã°èšèªã¯ãããéæããããã®ããŸããŸãªããŒã«ãæäŸããŠãããåã·ã¹ãã ã¯ã³ãŒãã®æ£ç¢ºæ§ãå¯èªæ§ãä¿å®æ§ã確ä¿ããäžã§éèŠãªåœ¹å²ãæãããŸããé«åºŠãªååæãå¯èœã«ãã2ã€ã®åŒ·åãªæŠå¿µããã€ã³ã¿ãŒã»ã¯ã·ã§ã³åãšãŠããªã³åã§ãããã®ã¬ã€ãã§ã¯ããããã®æŠå¿µãå æ¬çã«æ¢æ±ããå®è·µçãªã¢ããªã±ãŒã·ã§ã³ãšã°ããŒãã«ãªé¢é£æ§ã«çŠç¹ãåœãŠãŸãã
åºæ¬ãçè§£ããïŒã€ã³ã¿ãŒã»ã¯ã·ã§ã³åãšãŠããªã³å
é«åºŠãªãŠãŒã¹ã±ãŒã¹ã«èžã¿èŸŒãåã«ãæ žãšãªãå®çŸ©ãææ¡ããããšãäžå¯æ¬ ã§ãããããã®åæ§é ã¯TypeScriptã®ãããªèšèªã§ããèŠãããŸããããã®åºæ¬ååã¯å€ãã®éçåä»ãèšèªã«é©çšãããŸãã
ãŠããªã³å
ãŠããªã³åã¯ãããã€ãã®ç°ãªãåã®ããããã«ãªãããåã衚ããŸããããã¯ãããã®å€æ°ã¯æååãŸãã¯æ°å€ã®ããããã«ãªãããããšèšããããªãã®ã§ããæ§æã¯éåžžã`|`æŒç®åã䌎ããŸãã
type StringOrNumber = string | number;
let value1: StringOrNumber = "hello"; // Valid
let value2: StringOrNumber = 123; // Valid
// let value3: StringOrNumber = true; // Invalid
äžèšã®äŸã§ã¯ã`StringOrNumber`ã¯æååãŸãã¯æ°å€ãä¿æã§ããŸãããããŒã«å€ã¯ä¿æã§ããŸããããŠããªã³åã¯ã颿°ãç°ãªãå ¥ååãåãå ¥ããããç°ãªãçµæåãè¿ãã·ããªãªãæ±ãå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã
ã°ããŒãã«ãªäŸïŒé貚æç®ãµãŒãã¹ãæ³åããŠã¿ãŠãã ããã`convert()`颿°ã¯ã`number`ïŒæç®ãããéé¡ïŒãŸãã¯`string`ïŒãšã©ãŒã¡ãã»ãŒãžïŒã®ãããããè¿ãå¯èœæ§ããããŸãããŠããªã³åã䜿çšãããšããã®å¯èœæ§ãé©åã«ã¢ãã«åã§ããŸãã
ã€ã³ã¿ãŒã»ã¯ã·ã§ã³å
ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åã¯ãè€æ°ã®åãçµã¿åãããŠãåæ§æèŠçŽ ã®ãã¹ãŠã®ããããã£ãæã€åäžã®åãäœæããŸããåã«å¯ŸãããANDãæäœãšèããŠãã ãããæ§æã¯äžè¬çã«`&`æŒç®åã䜿çšããŸãã
interface Address {
street: string;
city: string;
}
interface Contact {
email: string;
phone: string;
}
type Person = Address & Contact;
let person: Person = {
street: "123 Main St",
city: "Anytown",
email: "john.doe@example.com",
phone: "555-1212",
};
ãã®å Žåã`Person`ã¯`Address`ãš`Contact`ã®äž¡æ¹ã§å®çŸ©ãããŠãããã¹ãŠã®ããããã£ãæã¡ãŸããã€ã³ã¿ãŒã»ã¯ã·ã§ã³åã¯ãè€æ°ã®ã€ã³ã¿ãŒãã§ãŒã¹ãŸãã¯åã®ç¹æ§ãçµåãããå Žåã«éåžžã«è²Žéã§ãã
ã°ããŒãã«ãªäŸïŒãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã®ãŠãŒã¶ãŒãããã¡ã€ã«ã·ã¹ãã ã`BasicProfile`ïŒååããŠãŒã¶ãŒåïŒãš`SocialFeatures`ïŒãã©ãã¯ãŒããã©ããŒäžïŒã®åå¥ã®ã€ã³ã¿ãŒãã§ãŒã¹ããããããããŸãããã€ã³ã¿ãŒã»ã¯ã·ã§ã³åã¯ãäž¡æ¹ãçµã¿åããã`ExtendedUserProfile`ãäœæã§ããŸãã
å®è·µçãªã¢ããªã±ãŒã·ã§ã³ãšãŠãŒã¹ã±ãŒã¹
ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åãšãŠããªã³åãå®éã®ã·ããªãªã§ã©ã®ããã«é©çšã§ããããæ¢ã£ãŠã¿ãŸããããç¹å®ã®ãã¯ãããžãŒãè¶ ããããåºç¯ãªé©çšå¯èœæ§ãæäŸããäŸãæ€èšŒããŸãã
ããŒã¿æ€èšŒãšãµãã¿ã€ãº
ãŠããªã³åïŒæ€èšŒé¢æ°ããã®ãæå¹ããŸãã¯ãç¡å¹ããªçµæãªã©ãããŒã¿ã®å¯èœãªç¶æ ãå®çŸ©ããããã«äœ¿çšã§ããŸããããã«ãããåå®å šæ§ã匷åãããã³ãŒããããå ç¢ã«ãªããŸããäŸãã°ãæ€èšŒæžã¿ã®ããŒã¿ãªããžã§ã¯ããŸãã¯ãšã©ãŒãªããžã§ã¯ãã®ãããããè¿ãæ€èšŒé¢æ°ãªã©ã§ãã
interface ValidatedData {
data: any;
}
interface ValidationError {
message: string;
}
type ValidationResult = ValidatedData | ValidationError;
function validateInput(input: any): ValidationResult {
// Validation logic here...
if (/* validation fails */) {
return { message: "Invalid input" };
} else {
return { data: input };
}
}
ãã®ã¢ãããŒãã¯ãæå¹ãªç¶æ ãšç¡å¹ãªç¶æ ãæç¢ºã«åé¢ããéçºè ãåã±ãŒã¹ãæç€ºçã«åŠçã§ããããã«ããŸãã
ã°ããŒãã«ãªå¿çšïŒå€èšèªeã³ããŒã¹ãã©ãããã©ãŒã ã®ãã©ãŒã åŠçã·ã¹ãã ãèããŠã¿ãŠãã ãããæ€èšŒã«ãŒã«ã¯ããŠãŒã¶ãŒã®å°åãããŒã¿åïŒäŸïŒé»è©±çªå·ãéµäŸ¿çªå·ïŒã«ãã£ãŠç°ãªãå ŽåããããŸãããŠããªã³åã¯ããããã®ã°ããŒãã«ãªã·ããªãªã«ãããæ€èšŒã®ç°ãªãæœåšçãªçµæã管çããã®ã«åœ¹ç«ã¡ãŸãã
è€éãªãªããžã§ã¯ãã®ã¢ããªã³ã°
ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åïŒããã·ã³ãã«ã§åå©çšå¯èœãªæ§æèŠçŽ ããè€éãªãªããžã§ã¯ããåæããã®ã«çæ³çã§ããããã«ãããã³ãŒãã®åå©çšãä¿é²ãããåé·æ§ãäœæžãããŸãã
interface HasName {
name: string;
}
interface HasId {
id: number;
}
interface HasAddress {
address: string;
}
type User = HasName & HasId;
type Product = HasName & HasId & HasAddress;
ããã¯ãããããã£ã®çµã¿åããã«ãã£ãŠç°ãªããªããžã§ã¯ãåãç°¡åã«äœæããæ¹æ³ã瀺ããŠããŸããããã«ãããåã ã®ã€ã³ã¿ãŒãã§ãŒã¹å®çŸ©ãç¬ç«ããŠæŽæ°ã§ãããã®åœ±é¿ãå¿ èŠãªå Žæã«ã®ã¿äŒæãããããä¿å®æ§ãåäžããŸãã
ã°ããŒãã«ãªå¿çšïŒåœéããžã¹ãã£ã¯ã¹ã·ã¹ãã ã§ã¯ã`Shipper`ïŒååãšäœæïŒã`Consignee`ïŒååãšäœæïŒã`Shipment`ïŒShipperãšConsigneeãšè¿œè·¡æ å ±ïŒãªã©ãç°ãªããªããžã§ã¯ãåãã¢ãã«åã§ããŸããã€ã³ã¿ãŒã»ã¯ã·ã§ã³åã¯ããããã®çžäºæ¥ç¶ãããåã®éçºãšé²åãå¹çåããŸãã
åå®å šãªAPIãšããŒã¿æ§é
ãŠããªã³åïŒè€æ°ã®ããŒã¿åœ¢åŒïŒJSONãXMLïŒãŸãã¯ããŒãžã§ã³ç®¡çæŠç¥ããµããŒãããæè»ãªAPIå¿çãå®çŸ©ããã®ã«åœ¹ç«ã¡ãŸãã
interface JsonResponse {
type: "json";
data: any;
}
interface XmlResponse {
type: "xml";
xml: string;
}
type ApiResponse = JsonResponse | XmlResponse;
function processApiResponse(response: ApiResponse) {
if (response.type === "json") {
console.log("Processing JSON: ", response.data);
} else {
console.log("Processing XML: ", response.xml);
}
}
ãã®äŸã¯ãAPIããŠããªã³ã䜿çšããŠç°ãªãããŒã¿åãè¿ãæ¹æ³ã瀺ããŠããŸããããã«ãããã³ã³ã·ã¥ãŒããåå¿çåãæ£ããåŠçã§ããããšãä¿èšŒãããŸãã
ã°ããŒãã«ãªå¿çšïŒå€æ§ãªèŠå¶èŠä»¶ã«æºæ ããåœã åãã«ãç°ãªãããŒã¿åœ¢åŒããµããŒãããå¿ èŠãããéèAPIãå¯èœãªå¿çæ§é ã®ãŠããªã³ãå©çšããåã·ã¹ãã ã¯ãç¹å®ã®å ±åã«ãŒã«ãšããŒã¿åœ¢åŒèŠä»¶ãèæ ®ããã¢ããªã±ãŒã·ã§ã³ãç°ãªãã°ããŒãã«åžå Žããã®å¿çãæ£ããåŠçããããšãä¿èšŒããŸãã
åå©çšå¯èœãªã³ã³ããŒãã³ããšã©ã€ãã©ãªã®äœæ
ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åïŒè€æ°ã®ã€ã³ã¿ãŒãã§ãŒã¹ããæ©èœãåæããããšã«ãããæ±çšçã§åå©çšå¯èœãªã³ã³ããŒãã³ãã®äœæãå¯èœã«ããŸãããããã®ã³ã³ããŒãã³ãã¯ãããŸããŸãªã³ã³ããã¹ãã«å®¹æã«é©å¿ã§ããŸãã
interface Clickable {
onClick: () => void;
}
interface Styleable {
style: object;
}
type ButtonProps = {
label: string;
} & Clickable & Styleable;
function Button(props: ButtonProps) {
// Implementation details
return null;
}
ãã®`Button`ã³ã³ããŒãã³ãã¯ãã©ãã«ãã¯ãªãã¯ãã³ãã©ãããã³ã¹ã¿ã€ãªã³ã°ãªãã·ã§ã³ãçµã¿åãããããããã£ãåãåããŸãããã®ã¢ãžã¥ãŒã«æ§ãšæè»æ§ã¯ãUIã©ã€ãã©ãªã«ãããŠæå©ã§ãã
ã°ããŒãã«ãªå¿çšïŒã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹ããµããŒãããããšãç®çãšããUIã³ã³ããŒãã³ãã©ã€ãã©ãªã`ButtonProps`ã¯ãã³ã³ããŒãã³ããç°ãªãæåçããã³èšèªçã³ã³ããã¹ãã«é©å¿ã§ããããã«ã`language: string`ã`icon: string`ãªã©ã®ããããã£ã§æ¡åŒµã§ããŸããã€ã³ã¿ãŒã»ã¯ã·ã§ã³åã䜿çšãããšãåºæ¬çãªã³ã³ããŒãã³ãå®çŸ©ã®äžã«æ©èœïŒäŸïŒã¢ã¯ã»ã·ããªãã£æ©èœããã±ãŒã«ãµããŒãïŒãéããããšãã§ããŸãã
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
åºæ¬ãè¶ ããŠããããã®é«åºŠãªåŽé¢ãçè§£ããããšã§ãååæã¹ãã«ã次ã®ã¬ãã«ã«é²ã¿ãŸãã
å€å¥ãŠããªã³ (Tagged Unions)
å€å¥ãŠããªã³ã¯ããŠããªã³åãšå€å¥åïŒå ±éã®ããããã£ïŒãçµã¿åãããŠãã©ã³ã¿ã€ã ã§åãçµã蟌ã匷åãªãã¿ãŒã³ã§ããããã«ãããç¹å®ã®åãã§ãã¯ãå¯èœã«ãªããåå®å šæ§ãåäžããŸãã
interface Circle {
kind: "circle";
radius: number;
}
interface Square {
kind: "square";
sideLength: number;
}
type Shape = Circle | Square;
function getArea(shape: Shape): number {
switch (shape.kind) {
case "circle":
return Math.PI * shape.radius * shape.radius;
case "square":
return shape.sideLength * shape.sideLength;
}
}
ãã®äŸã§ã¯ã`kind`ããããã£ãå€å¥åãšããŠæ©èœããŸãã`getArea`颿°ã¯`switch`ã¹ããŒãã¡ã³ãã䜿çšããŠããããã©ã®åã®å³åœ¢ã§ãããã倿ããåå®å šãªæäœãä¿èšŒããŸãã
ã°ããŒãã«ãªå¿çšïŒåœéeã³ããŒã¹ãã©ãããã©ãŒã ã§ç°ãªãæ¯æãæ¹æ³ïŒã¯ã¬ãžããã«ãŒããPayPalãéè¡æ¯èŸŒïŒãåŠçããå ŽåããŠããªã³å ã®`paymentMethod`ããããã£ãå€å¥åãšãªããã³ãŒãã忝æãã¿ã€ããå®å šã«åŠçã§ããããã«ãªããŸãã
æ¡ä»¶å
æ¡ä»¶åã䜿çšãããšãä»ã®åã«äŸåããåãäœæã§ããŸãããããã¯ãæŽç·Žãããåã·ã¹ãã ãæ§ç¯ããããã«ãã€ã³ã¿ãŒã»ã¯ã·ã§ã³åãšãŠããªã³åãšé£æºããŠæ©èœããããšããããããŸãã
type IsString = T extends string ? true : false;
let isString1: IsString = true; // true
let isString2: IsString = false; // false
ãã®äŸã¯ãå`T`ãæååã§ãããã©ããããã§ãã¯ããŸããããã¯ãå倿Žã«é©å¿ããåå®å šãªé¢æ°ãæ§ç¯ããã®ã«åœ¹ç«ã¡ãŸãã
ã°ããŒãã«ãªå¿çšïŒãŠãŒã¶ãŒã®ãã±ãŒã«ã«åºã¥ããŠç°ãªãé貚圢åŒã«é©å¿ããå Žåãæ¡ä»¶åã¯ãé貚èšå·ïŒäŸïŒã$ãïŒãéé¡ã®åã«æ¥ããåŸã«æ¥ãããæ±ºå®ããå°åã®æžåŒèšå®èŠåãèæ ®ããããšãã§ããŸãã
ãããã³ã°å
ãããã³ã°åã䜿çšãããšãæ¢åã®åã倿ããŠæ°ããåãäœæã§ããŸããããã¯ãæ¢åã®åå®çŸ©ã«åºã¥ããŠåãçæããå Žåã«äŸ¡å€ããããŸãã
interface Person {
name: string;
age: number;
email: string;
}
type ReadonlyPerson = { readonly [K in keyof Person]: Person[K] };
ãã®äŸã§ã¯ã`ReadonlyPerson`ã¯`Person`ã®ãã¹ãŠã®ããããã£ãèªã¿åãå°çšã«ããŸãããããã³ã°åã¯ãç¹ã«å€éšãœãŒã¹ããã®ããŒã¿ãæ±ãå Žåã«ãåçã«çæãããåãæ±ãã®ã«åœ¹ç«ã¡ãŸãã
ã°ããŒãã«ãªå¿çšïŒããŒã«ã©ã€ãºãããããŒã¿æ§é ãäœæããå Žåããããã³ã°åã䜿çšããŠãæ±çšããŒã¿ãªããžã§ã¯ããåãåããç°ãªãå°åã«åãããŠç¿»èš³ãããã©ãã«ãåäœãæã€ããŒã«ã©ã€ãºãããããŒãžã§ã³ãçæã§ããŸãã
广çãªäœ¿çšã®ããã®ãã¹ããã©ã¯ãã£ã¹
ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åãšãŠããªã³åã®ã¡ãªãããæå€§éã«åŒãåºãããã«ããããã®ãã¹ããã©ã¯ãã£ã¹ãéµå®ããŠãã ããã
ç¶æ¿ãããã³ã³ããžã·ã§ã³ãåªå ãã
ã¯ã©ã¹ç¶æ¿ã«ã¯ãã®åœ¹å²ããããŸãããå¯èœãªå Žåã¯ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åã䜿çšããã³ã³ããžã·ã§ã³ãåªå ããŠãã ãããããã«ãããããæè»ã§ä¿å®æ§ã®é«ãã³ãŒããäœæãããŸããäŸãã°ãæè»æ§ã®ããã«ã¯ã©ã¹ãæ¡åŒµããã®ã§ã¯ãªããã€ã³ã¿ãŒãã§ãŒã¹ãåæãããªã©ã§ãã
åãæç¢ºã«ææžåãã
é©åã«ææžåãããåã¯ãã³ãŒãã®å¯èªæ§ãå€§å¹ ã«åäžãããŸããç¹ã«è€éãªã€ã³ã¿ãŒã»ã¯ã·ã§ã³ããŠããªã³ãæ±ãå Žåã¯ãååã®ç®çã説æããã³ã¡ã³ããæäŸããŠãã ããã
èšè¿°çãªååã䜿çšãã
åã®æå³ãæç¢ºã«äŒããããã«ãæå³ã®ããååãéžæããŠãã ããã衚ãããŒã¿ã«é¢ããå ·äœçãªæ å ±ãäŒããªãäžè¬çãªååã¯é¿ããŠãã ããã
培åºçã«ãã¹ããã
åãæ£ããæ©èœããããšãç¹ã«ä»ã®ã³ã³ããŒãã³ããšã®çžäºäœçšãä¿èšŒããããã«ããã¹ãã¯éåžžã«éèŠã§ããç¹ã«å€å¥ãŠããªã³ã䜿çšããå Žåã¯ãããŸããŸãªåã®çµã¿åããããã¹ãããŠãã ããã
ã³ãŒãçæãæ€èšãã
ç¹°ãè¿ãè¡ãå宣èšãåºç¯ãªããŒã¿ã¢ããªã³ã°ã®å Žåãåäœæãèªååãäžè²«æ§ã確ä¿ããããã«ã³ãŒãçæããŒã«ã䜿çšããããšãæ€èšããŠãã ããã
åé§åéçºãåãå ¥ãã
ã³ãŒããæžãåã«ãåã«ã€ããŠèããŠãã ãããããã°ã©ã ã®æå³ã衚çŸããããã«åãèšèšããŸããããã¯ãèšèšäžã®åé¡ãæ©æã«çºèŠããã³ãŒãã®å質ãšä¿å®æ§ãå€§å¹ ã«åäžãããã®ã«åœ¹ç«ã¡ãŸãã
IDEãµããŒããæŽ»çšãã
IDEã®ã³ãŒãè£å®ãšåãã§ãã¯æ©èœã掻çšããŠãã ããããããã®æ©èœã¯ãéçºããã»ã¹ã®æ©ã段éã§åãšã©ãŒãæ€åºããã®ã«åœ¹ç«ã¡ã貎éãªæéãšåŽåãç¯çŽããŸãã
å¿ èŠã«å¿ããŠãªãã¡ã¯ã¿ãªã³ã°ãã
åã®å®çŸ©ã宿çã«èŠçŽããŠãã ãããã¢ããªã±ãŒã·ã§ã³ãé²åããã«ã€ããŠãåã®ããŒãºãå€åããŸããåŸã§è€éåããã®ãé²ãããã«ãå€åããããŒãºã«å¯Ÿå¿ããããã«åããªãã¡ã¯ã¿ãªã³ã°ããŠãã ããã
å®äžçã®äŸãšã³ãŒãã¹ãããã
çè§£ãæ·±ããããã«ãããã€ãã®å®çšçãªäŸãæãäžããŠã¿ãŸãããããããã®ã¹ããããã¯ãäžè¬çãªç¶æ³ã§ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åãšãŠããªã³åãé©çšããæ¹æ³ã瀺ããŠããŸãã
äŸ1ïŒæ€èšŒãå«ããã©ãŒã ããŒã¿ã®ã¢ããªã³ã°
ãŠãŒã¶ãŒãããã¹ããæ°å€ãæ¥ä»ãå ¥åã§ãããã©ãŒã ãæ³åããŠãã ããããã©ãŒã ããŒã¿ãæ€èšŒããç°ãªãå ¥åãã£ãŒã«ãã¿ã€ããåŠçããããšèããŠããŸãã
interface TextField {
type: "text";
value: string;
minLength?: number;
maxLength?: number;
}
interface NumberField {
type: "number";
value: number;
minValue?: number;
maxValue?: number;
}
interface DateField {
type: "date";
value: string; // Consider using a Date object for better date handling
minDate?: string; // or Date
maxDate?: string; // or Date
}
type FormField = TextField | NumberField | DateField;
function validateField(field: FormField): boolean {
switch (field.type) {
case "text":
if (field.minLength !== undefined && field.value.length < field.minLength) {
return false;
}
if (field.maxLength !== undefined && field.value.length > field.maxLength) {
return false;
}
break;
case "number":
if (field.minValue !== undefined && field.value < field.minValue) {
return false;
}
if (field.maxValue !== undefined && field.value > field.maxValue) {
return false;
}
break;
case "date":
// Date validation logic
break;
}
return true;
}
function processForm(fields: FormField[]) {
fields.forEach(field => {
if (!validateField(field)) {
console.log(`Validation failed for field: ${field.type}`);
} else {
console.log(`Validation succeeded for field: ${field.type}`);
}
});
}
const formFields: FormField[] = [
{
type: "text",
value: "hello",
minLength: 3,
},
{
type: "number",
value: 10,
minValue: 5,
},
{
type: "date",
value: "2024-01-01",
},
];
processForm(formFields);
ãã®ã³ãŒãã¯ãå€å¥ãŠããªã³ïŒFormFieldïŒã䜿çšããŠç°ãªããã£ãŒã«ãã¿ã€ããæã€ãã©ãŒã ã瀺ããŠããŸããvalidateField颿°ã¯ãåãã£ãŒã«ãã¿ã€ããå®å
šã«åŠçããæ¹æ³ã瀺ããŠããŸããåå¥ã®ã€ã³ã¿ãŒãã§ãŒã¹ãšå€å¥ãŠããªã³åã®äœ¿çšã¯ãåå®å
šæ§ãšã³ãŒãã®æŽçãæäŸããŸãã
ã°ããŒãã«ãªé¢é£æ§ïŒãã®ãã¿ãŒã³ã¯æ®éçã«é©çšå¯èœã§ããåœéçãªæ £ç¿ã«å¿ããŠç°ãªãæ€èšŒã«ãŒã«ãå¿ èŠãšããããŸããŸãªããŒã¿åœ¢åŒïŒäŸïŒé貚å€ãé»è©±çªå·ãäœæïŒããµããŒãããããã«æ¡åŒµã§ããŸãããŠãŒã¶ãŒã®åžæããèšèªã§æ€èšŒãšã©ãŒã¡ãã»ãŒãžã衚瀺ããããã«ãåœéåã©ã€ãã©ãªãçµã¿èŸŒãããšãã§ããŸãã
äŸ2ïŒæè»ãªAPIå¿çæ§é ã®äœæ
JSONãšXMLã®äž¡æ¹ã®åœ¢åŒã§ããŒã¿ãæäŸãããšã©ãŒåŠçãå«ãAPIãæ§ç¯ããŠãããšä»®å®ããŸãã
interface SuccessResponse {
status: "success";
data: any; // data can be anything depending on the request
}
interface ErrorResponse {
status: "error";
code: number;
message: string;
}
interface JsonResponse extends SuccessResponse {
contentType: "application/json";
}
interface XmlResponse {
status: "success";
contentType: "application/xml";
xml: string; // XML data as a string
}
type ApiResponse = JsonResponse | XmlResponse | ErrorResponse;
async function fetchData(): Promise {
try {
// Simulate fetching data
const data = { message: "Data fetched successfully" };
return {
status: "success",
contentType: "application/json",
data: data, // Assuming response is JSON
} as JsonResponse;
} catch (error: any) {
return {
status: "error",
code: 500,
message: error.message,
} as ErrorResponse;
}
}
async function processApiResponse() {
const response = await fetchData();
if (response.status === "success") {
if (response.contentType === "application/json") {
console.log("Processing JSON data: ", response.data);
} else if (response.contentType === "application/xml") {
console.log("Processing XML data: ", response.xml);
}
} else {
console.error("Error: ", response.message);
}
}
processApiResponse();
ãã®APIã¯ãå¯èœãªå¿çã¿ã€ããèšè¿°ããããã«ãŠããªã³ïŒApiResponseïŒãå©çšããŠããŸããããããã®åãæã€ç°ãªãã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããããšã§ãå¿çãæå¹ã§ããããšãä¿èšŒãããŸãã
ã°ããŒãã«ãªé¢é£æ§ïŒã°ããŒãã«ãªã¯ã©ã€ã¢ã³ãã«ãµãŒãã¹ãæäŸããAPIã¯ãããŸããŸãªããŒã¿åœ¢åŒãšæšæºã«é »ç¹ã«æºæ ããå¿ èŠããããŸãããã®æ§é ã¯éåžžã«é©å¿æ§ãé«ããJSONãšXMLã®äž¡æ¹ããµããŒãããŸããããã«ããã®ãã¿ãŒã³ã«ãããæ°ããããŒã¿åœ¢åŒãšå¿çã¿ã€ãããµããŒãããããã«æ¡åŒµã§ããããããµãŒãã¹ã¯å°æ¥ã«ããã£ãŠããå ç¢ã«ãªããŸãã
äŸ3ïŒåå©çšå¯èœãªUIã³ã³ããŒãã³ãã®æ§ç¯
ç°ãªãã¹ã¿ã€ã«ãšåäœã§ã«ã¹ã¿ãã€ãºã§ããæè»ãªãã¿ã³ã³ã³ããŒãã³ããäœæããŠã¿ãŸãããã
interface ButtonProps {
label: string;
onClick: () => void;
style?: Partial; // allows for styling through an object
disabled?: boolean;
className?: string;
}
function Button(props: ButtonProps): JSX.Element {
return (
);
}
const myButtonStyle = {
backgroundColor: 'blue',
color: 'white',
padding: '10px 20px',
border: 'none',
cursor: 'pointer'
}
const handleButtonClick = () => {
alert('Button Clicked!');
}
const App = () => {
return (
);
}
Buttonã³ã³ããŒãã³ãã¯ãButtonPropsãªããžã§ã¯ããåãåããŸããããã¯ããã®å Žåãã©ãã«ãã¯ãªãã¯ãã³ãã©ãã¹ã¿ã€ã«ãããã³disabled屿§ãšãããæãŸããããããã£ã®ã€ã³ã¿ãŒã»ã¯ã·ã§ã³ã§ãããã®ã¢ãããŒãã¯ãç¹ã«å€§èŠæš¡ãªã°ããŒãã«ã«åæ£ããã¢ããªã±ãŒã·ã§ã³ã§UIã³ã³ããŒãã³ããæ§ç¯ããéã«ãåå®å
šæ§ã確ä¿ããŸããCSSã¹ã¿ã€ã«ãªããžã§ã¯ãã®äœ¿çšã¯ãæè»ãªã¹ã¿ã€ãªã³ã°ãªãã·ã§ã³ãæäŸããã¬ã³ããªã³ã°ã®ããã®æšæºçãªWeb APIãæŽ»çšããŸãã
ã°ããŒãã«ãªé¢é£æ§ïŒUIãã¬ãŒã ã¯ãŒã¯ã¯ãããŸããŸãªãã±ãŒã«ãã¢ã¯ã»ã·ããªãã£èŠä»¶ãããã³ãã©ãããã©ãŒã ã®æ £ç¿ã«é©å¿ããå¿ èŠããããŸãããã¿ã³ã³ã³ããŒãã³ãã¯ããã±ãŒã«åºæã®ããã¹ããç°ãªãã€ã³ã¿ã©ã¯ã·ã§ã³ã¹ã¿ã€ã«ïŒããšãã°ãç°ãªãèªã¿åãæ¹åãæ¯æŽæè¡ã«å¯Ÿå¿ããããïŒãçµã¿èŸŒãããšãã§ããŸãã
ããããèœãšã穎ãšãã®åé¿ç
ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åãšãŠããªã³åã¯åŒ·åã§ãããæ³šææ·±ã䜿çšããªããšåŸ®åŠãªåé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã
åãé床ã«è€éã«ãã
ã³ãŒããèªã¿ã«ãããä¿å®ãã«ããããé床ã«è€éãªååæã¯é¿ããŠãã ãããåã®å®çŸ©ã¯å¯èœãªéãã·ã³ãã«ã§æç¢ºã«ä¿ã¡ãŸããæ©èœæ§ãšå¯èªæ§ã®ãã©ã³ã¹ãåããŸãããã
é©åãªå Žåã«å€å¥ãŠããªã³ã䜿çšããªã
éè€ããããããã£ãæã€ãŠããªã³åã䜿çšããå Žåã¯ãå€å¥ãŠããªã³ïŒå€å¥åãã£ãŒã«ããæã€ïŒã䜿çšããŠåçµã蟌ã¿ã容æã«ãã誀ã£ãåã¢ãµãŒã·ã§ã³ã«ããã©ã³ã¿ã€ã ãšã©ãŒãåé¿ããããã«ããŠãã ããã
åå®å šæ§ãç¡èŠãã
åã·ã¹ãã ã®äž»èŠãªç®çã¯åå®å šæ§ã§ããããšãå¿ããªãã§ãã ãããåã®å®çŸ©ãããŒã¿ãšããžãã¯ãæ£ç¢ºã«åæ ããŠããããšã確èªããŠãã ãããåé¢é£ã®æœåšçãªåé¡ãæ€åºããããã«ãåã®äœ¿çšç¶æ³ã宿çã«èŠçŽããŠãã ããã
`any`ãžã®é床ãªäŸå
`any`ã䜿çšããèªæã«æµæããŠãã ããã䟿å©ã§ããã`any`ã¯åãã§ãã¯ããã€ãã¹ããŸããæåŸã®ææ®µãšããŠãæ§ããã«äœ¿çšããŠãã ãããåå®å šæ§ãé«ããããã«ãããå ·äœçãªåå®çŸ©ã䜿çšããŠãã ããã`any`ã䜿çšãããšãåã·ã¹ãã ãæã€ããšã®ç®çãã®ãã®ãæãªãããŸãã
åã宿çã«æŽæ°ããªã
é²åããããžãã¹ããŒãºãšAPIã®å€æŽã«åãããŠãåå®çŸ©ãåæãããŠãã ãããããã¯ãåãšå®è£ ã®äžäžèŽã«ãã£ãŠçããåé¢é£ã®ãã°ãé²ãããã«äžå¯æ¬ ã§ãããã¡ã€ã³ããžãã¯ãæŽæ°ãããšãã¯ãåå®çŸ©ãèŠçŽããŠããããææ°ã§æ£ç¢ºã§ããããšã確èªããŠãã ããã
çµè«ïŒã°ããŒãã«ãœãããŠã§ã¢éçºã®ããã®ååæã®æŽ»çš
ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åãšãŠããªã³åã¯ãå ç¢ã§ä¿å®å¯èœã§åå®å šãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åºæ¬çãªããŒã«ã§ãããããã®æ§æèŠçŽ ã广çã«å©çšããæ¹æ³ãçè§£ããããšã¯ãã°ããŒãã«ãªç°å¢ã§åããã¹ãŠã®ãœãããŠã§ã¢éçºè ã«ãšã£ãŠäžå¯æ¬ ã§ãã
ãããã®ãã¯ããã¯ãç¿åŸããããšã§ã次ã®ããšãå¯èœã«ãªããŸãã
- è€éãªããŒã¿æ§é ãæ£ç¢ºã«ã¢ãã«åããã
- åå©çšå¯èœã§æè»ãªã³ã³ããŒãã³ããšã©ã€ãã©ãªãäœæããã
- ç°ãªãããŒã¿åœ¢åŒãã·ãŒã ã¬ã¹ã«åŠçããåå®å šãªAPIãæ§ç¯ããã
- ã°ããŒãã«ããŒã ã®ã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžãããã
- ã©ã³ã¿ã€ã ãšã©ãŒã®ãªã¹ã¯ãæå°éã«æããå šäœçãªã³ãŒãå質ãåäžãããã
ã€ã³ã¿ãŒã»ã¯ã·ã§ã³åãšãŠããªã³åã«æ £ããŠãããšãããããéçºã¯ãŒã¯ãããŒã®äžå¯æ¬ ãªéšåãšãªããããä¿¡é Œæ§ãé«ãã¹ã±ãŒã©ãã«ãªãœãããŠã§ã¢ã«ã€ãªããããšããããã§ããããã°ããŒãã«ãªã³ã³ããã¹ããå¿ããªãã§ãã ããããããã®ããŒã«ã䜿çšããŠãã°ããŒãã«ãŠãŒã¶ãŒã®å€æ§ãªããŒãºãšèŠä»¶ã«é©å¿ãããœãããŠã§ã¢ãäœæããŠãã ããã
ç¶ç¶çãªåŠç¿ãšå®éšã¯ãããããããã°ã©ãã³ã°æŠå¿µãç¿åŸããããã®éµã§ããå®è·µããèªã¿ããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã«è²¢ç®ããŠçè§£ãæ·±ããŠãã ãããåé§åéçºãæ¡çšããIDEãæŽ»çšããã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ããŠä¿å®å¯èœã§ã¹ã±ãŒã©ãã«ã«ä¿ã¡ãŸãããããœãããŠã§ã¢ã®æªæ¥ã¯ããŸããŸãæç¢ºã§é©åã«å®çŸ©ãããåã«äŸåããŠãããã€ã³ã¿ãŒã»ã¯ã·ã§ã³åãšãŠããªã³åãåŠã¶åªåã¯ããããããœãããŠã§ã¢éçºãã£ãªã¢ã«ãããŠéåžžã«è²Žéãªãã®ãšãªãã§ãããã